/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package estsapp.expertos;

import estsapp.entidades.EtapaFabricacion;
import estsapp.entidades.RutaFabricacion;
import estsapp.expertos.excepciones.ABMRutaFabricacionException;
import java.util.List;
import persistencia.Conexion;
import persistencia.Fachada;
import persistencia.exceptions.ExcepcionFachada;

/**
 *
 * @author diego
 */
public class ExpertoABMRutaFabriacion implements Experto{
    
    public void guardar(RutaFabricacion rutaFabricacion) throws ABMRutaFabricacionException, ExcepcionFachada{
        validarRutaFabricacion(rutaFabricacion);
        try {
            Conexion.getInstancia().iniciarTX();
            Fachada.getInstancia().guardar(rutaFabricacion);
            Conexion.getInstancia().confirmarTx();
        } catch (ExcepcionFachada ex) {
            Conexion.getInstancia().deshacerTx();
            throw ex;
        }
    }

    private void validarRutaFabricacion(RutaFabricacion rutaFabricacion) throws ABMRutaFabricacionException {
        if(rutaFabricacion.getEstapasFabricacion()== null){
            throw new ABMRutaFabricacionException("Debe ingresar etapas de fabricación.");
        }
        for (EtapaFabricacion etapaFabricacion : rutaFabricacion.getEstapasFabricacion()) {
            if(etapaFabricacion.getNroEtapa()==0){
                throw new ABMRutaFabricacionException("Contiene etapa sin ingresar NRO Etapa");
            }
            if(etapaFabricacion.getDuracion()==0){
                throw new ABMRutaFabricacionException("Etapa NRO: "+etapaFabricacion.getNroEtapa()+"su duración no puede ser 0");
            }
        }
    }
    
    public List buscarOperarios(){
        return ((ExpertoABMTrabajador)FabricaExpertos.getInstancia().getExperto(FabricaExpertos.expertos.ABM_TRABAJADOR)).buscarTrabajador();
    }
    
    public List buscarCentrosTrabajo(){
        return ((ExpertoABMCentroDeTrabajo)FabricaExpertos.getInstancia().getExperto(FabricaExpertos.expertos.ABM_CENTRO_DE_TRABAJO)).buscarCentros();
    }
    
    public List buscarMaquinarias(){
        return ((ExpertoABMMaquinaria)FabricaExpertos.getInstancia().getExperto(FabricaExpertos.expertos.ABM_MAQUINARIA)).buscarMaquinarias();
    }
    
    public List buscarProductosIntermedios(){
        return ((ExpertoABMProductoIntermedio)FabricaExpertos.getInstancia().getExperto(FabricaExpertos.expertos.ABM_PRODUCTO_INTERMEDIO)).buscarProductosIntermedios();
    }

    public List buscarCategorias() {
        return ((ExpertoABMCategoriaTrabajador)FabricaExpertos.getInstancia().getExperto(FabricaExpertos.expertos.ABM_CATEGORIA_TRABAJADOR)).buscarCategorias();
    }

    
}
